# ====== Build stage ======
FROM openjdk:17 AS build
WORKDIR /app

# 1. 先复制Maven配置文件（利用Docker层缓存）
COPY pom.xml mvnw ./
COPY .mvn .mvn

# 2. 给 mvnw 添加执行权限
RUN chmod +x mvnw

# 3. 下载依赖（这一层会被缓存，除非pom.xml变化）
RUN ./mvnw -q -e -U -DskipTests -Paliyun dependency:go-offline

# 4. 复制源代码（只有代码变化时才会重新构建）
COPY src ./src

# 5. 构建项目
RUN ./mvnw -q -DskipTests -Paliyun clean package

# ====== Runtime stage ======
FROM openjdk:17
# 堆空间占总容器空间的3/4，防止栈空间被挤压，导致OOM（内存申请失败）
ENV TZ=Asia/Shanghai \
    JAVA_OPTS="-XX:MaxRAMPercentage=75 -XX:+UseG1GC -Dfile.encoding=UTF-8"
WORKDIR /app

# 复制构建好的jar包
COPY --from=build /app/target/lottery-system-0.0.1-SNAPSHOT.jar /app/app.jar

#声明应用在那个端口
EXPOSE 8080


# ENTRYPOINT 用来定义容器启动时执行的“主命令”（入口命令）
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar /app/app.jar"]